perm filename G7[KID,KMC] blob
sn#122906 filedate 1974-11-15 generic text, type T, neo UTF8
TITLE G7
;THIS MEMBER PROGRAM OF THE NEW KIDS SUITE SHOWS PHRASE CONSTRUCTION
;IN AN ANALOGOUS MANNER TO THE WORD CONSTRUCTION OF GAME6.
EXTERNAL MAINLP,DPINIT,PDPGET,CLEAR,SHOW,AIVECT,CHINIT
EXTERNAL LV2,KILL,TYOPTR,TIKCNT,DDRREL,DMDDIR,SPEAK
INTERNAL DOTHNG,GAMNAM,GAMENO,DIRECT
;THE FOLLOWING PSEUDO PROGRAM MAY EXPLAIN THE OPERATION.
; SHOW ALPHABET ON POG1;
; FOR EACH OF THE APPROP 3 WORDS DO
; BEGIN
; FOR EACH OF SIX POSITIONS DO
; CLEAR POG2, POG3 OR POG4
; BEGIN
; FOR EACH OF THE LETTERS DO
; BEGIN
; COMPUTE COORDINATES;
; DRAW INVISIBLE VECTOR TO IT;
; PUT OUT THE CHARACTER;
; END;
; WAIT A SHORT WHILE;
; END;
; SHOW ON POG2,POG3 OR POG4
; SAY THE APPROPRIATE SOUND;
; END.
X1←6
X2 ← X1+1
X3 ← X2+1
X4 ← X3+1
X5 ← X4+1
X6 ← X5+1
P←17
A←13 ;SAME AS X6
B←14
C←15
GAMNAM: 0
GAMENO: 000700000000 ;GAME NUMBER FOR HISTORY FILE
DIRECT: BLOCK =1 ;NO PICTURE FILES.
DOTHNG: ;ELIMINATE MOST OF THE NON-ALPHANUMERICS.
CAILE X1,132
JRST MAINLP ;REJECT CHARCTERS ABOVE ALPHABET.
CAIGE X1,060
JRST MAINLP ;REJECT CHARACTERS BELOW DIGITS.
SUBI X1,040 ;RECODE TO SIXBIT
SETZM TIKCNT
MOVEI A,2
PUSHJ P,KILL ;CLEAR POG2
MOVEI A,3
PUSHJ P,KILL ;CLEAR POG3
MOVEI A,4
PUSHJ P,KILL ;CLEAR POG4
;FIRST ORDER OF BUSINESS IS TO DISPLAY THE ALPHABET ON POG1.
PUSHJ P,CLEAR
MOVEI X2,0 ;THIS WILL COUNT THE ALPHABET OFF.
ALPHLP: HLRZ A,LTRPOS(X2) ;X COMPONENT.
HRRZ B,LTRPOS(X2) ;Y COMPONENT.
PUSHJ P,AIVECT ;INVISIBLE VECTOR TO APPROP. POSN.
MOVEI A,0
MOVEI B,0
MOVEI C,46
MOVEI 0,6
DPB 0,[POINT 3,C,27]
PUSHJ P,LV2 ;GVECT(0,0,46,7,0)
MOVEI A,6
MOVEI B,=1000
MOVEI C,-=512
PUSHJ P,CHINIT ;CHINIT(6,1000,-512)
MOVE X3,X2
ADDI X3,101 ;CONVERT POINTER TO A LETTER
IDPB X3,TYOPTR ;PUT THE CHARACTER IN THE BUFFER
ADDI X2,1
CAIGE X2,=26
JRST ALPHLP
MOVEI A,1
PUSHJ P,SHOW ;DISPLAY THE ALPHABET
MAIN: ;NOW WE PREPARE FOR THE MAIN LOOP OF THE PROGRAM (DISPLAY 3 WDS)
MOVEI X2,0 ;WILL LOOP 3 TIMES (X2 = 0,1,2)
LOOP1S: ;START OF LOOP 1
MOVE X3,X1 ;GET THE LETTER
SUBI X3,20 ;RECODE SO CODE FOR 0 IS 0
IMULI X3,3
ADD X3,X2 ;ADDRES OF WORD TO BE SHOWN
MOVE X4,WORDS(X3) ;GET THE WORD TO BE SHOWN
MOVEM X4,THISWD
MOVE X4,SOUNDS(X3) ;GET THE FILE TO BE SAID
MOVEM X4,THISND
MOVEI X3,5 ;DO LOOP2 6 TIMES (X3= 5,4,3,2,1,0)
LOOP2S: ;START OF LOOP2
PUSHJ P,CLEAR ;CLEAR DISPLAY BUFFER.
MOVEI X4,=30 ;DO LOOP3 6 TIMES (X4= 30,24,18,12,6,0)
LOOP3S: ;START OF LOOP 3 (THE INNER-MOST LOOP)
MOVE X5,THISWD ;WILL DISSECT THIS WORD
LSH X5,0(X4) ;NEXT CHARACTER TO TOP X5.
LSH X5,-=30
JUMPE X5,LOOP3E ;DO NOTHING IF IT IS A SPACE
MOVEM X5,THISCH ;THIS IS CURRENT CHARACTER.
SUBI X5,041 ;NORMALISE SO CODE(A) = 0.
MOVE A,LTRPOS(X5) ;THE GRID POSITION OF THIS LETTER.
MOVEM A,THISLP
MOVE X5,X4
ADDI X5,5
SUB X5,X3 ;THIS WILL INDEX A POSN.
MOVE A,TULIP(X5) ;THE COORDINATE PAIR IN THE TULIP
MOVEM A,THISTP ;TULIP POINT COORDINATE PAIR
HLRZ A,THISLP ;X COORDINATE OF LETTER POSITION
HLRZ B,THISTP ;X COORDINATE OF TULIP POINT
PUSHJ P,COORD
MOVE X5,B ;COMPUTED X COORDINATE
HRRZ A,THISLP ;Y COORDINATE OF LETTER POSITION
HRRZ B,THISTP ;Y COORDINATE OF TULIP POINT
MOVEI C,0
SUB C,X2 ;2-WORDNUMBER
IMULI C,=60 ;60 POSITIONS OF SPACE PER LINE
ADD B,C ;BUMP THE Y COORDINATE MOST FOR 1ST WORD.
PUSHJ P,COORD
MOVE A,X5 ;THIS WAS THE SAVED X COORD.
PUSHJ P,AIVECT ;VECTOR TO COMPUTED POSITION.
MOVEI A,0
MOVEI B,0
MOVEI C,46
MOVEI 0,7
DPB 0,[POINT 3,C,27]
PUSHJ P,LV2 ;GVECT(0,0,46,7,0)
MOVEI A,7
MOVEI B,=1000
MOVEI C,-=500
PUSHJ P,CHINIT ;CHINIT(7,1000,-500)
MOVE X5,THISCH ;GET THE CURRENT CHARACTER.
ADDI X5,040 ;ASCII CHARACTER
IDPB X5,TYOPTR ;PUT CHARACTER OUT.
LOOP3E: SUBI X4,6
CAIL X4,0
LOOP3X: JRST LOOP3S
SKIPGE TIKCNT
JRST .+4 ;TIME HAS RUN OUT
MOVEI X6,0
CALL X6,[SIXBIT /SLEEP/]
JRST .-4 ;SEE IF ENOUGH TIME LOST.
MOVE A,X2
ADDI A,2
PUSHJ P,SHOW ;DISPLAY ON POG2,POG3 OR POG4
MOVEI X6,1 ;10 TIKS = 1/6 SECOND
MOVEM X6,TIKCNT
SUBI X3,1
CAIL X3,0
LOOP2X: JRST LOOP2S
MOVE A,THISND ;FILE NAME
PUSHJ P,DMDDIR
JUMPN A,.+2 ;NOTHING TO SAY IF BAD EXIT
PUSHJ P,SPEAK
ADDI X2,1
CAIG X2,2
LOOP1X: JRST LOOP1S
JRST MAINLP
COORD: ;A S/R WHICH TAKES A TULIP POINT COORDINATE IN B AND A LETTER
;POSITION IN A AND COMPUTES USING X3 (FRAME NO.) A FINAL COORDINATE.
LSH A,=18
ASH A,-=18
LSH B,=18
ASH B,-=18
IMUL A,X3 ;α*X3
IMUL A,X3 ;α*X3*X3
MOVEI C,6
SUB C,X3 ;6-X3
IMUL C,B ;(6-X)β
IDIVI A,6 ;α*X3*X3/6 IS IN A
ADD A,C ;α*X3*X3/6 + β(6-X)
IDIVI A,6
MOVE B,A ;RESULT [ α*X3*X3/6 + β(6-X) ]/6
POPJ P,
LTRPOS: ;THIS ARRAY GIVES THE COORDINATES OF THE LETTERS OF THE ALPHABET.
APOSN: XWD -=500,-=320
BPOSN: XWD -=500,-=380
CPOSN: XWD -=500,-=440
DPOSN: XWD -=455,-=500
EPOSN: XWD -=410,-=500
FPOSN: XWD -=365,-=500
GPOSN: XWD -=320,-=500
HPOSN: XWD -=275,-=500
IPOSN: XWD -=230,-=500
JPOSN: XWD -=185,-=500
KPOSN: XWD -=140,-=500
LPOSN: XWD -=095,-=500
MPOSN: XWD -=050,-=500
NPOSN: XWD -=005,-=500
OPOSN: XWD =040,-=500
PPOSN: XWD =085,-=500
QPOSN: XWD =130,-=500
RPOSN: XWD =175,-=500
SPOSN: XWD =220,-=500
TPOSN: XWD =265,-=500
UPOSN: XWD =310,-=500
VPOSN: XWD =355,-=500
WPOSN: XWD =400,-=500
XPOSN: XWD =445,-=500
YPOSN: XWD =490,-=440
ZPOSN: XWD =490,-=380
XWD =490,-=320
TULIP: ;THIS ARRAY GIVES THE TULIP FORMED BY THE IDEAL LOCI OF THE SIX
;LETTERS AS THEY MIGHT MOVE FROM (0,-350) TO THE WORD.
LETTR0: XWD =000,-=350
XWD -=160,-=220
XWD -=300,-=090
XWD -=360, =040
XWD -=250, =170
XWD -=090, =300
LETTR1: XWD =000,-=350
XWD -=100,-=220
XWD -=200,-=090
XWD -=240, =040
XWD -=160, =170
XWD -=050, =300
LETTR2: XWD =000,-=350
XWD -=050,-=220
XWD -=100,-=090
XWD -=120, =040
XWD -=080, =170
XWD -=010, =300
LETTR3: XWD =000,-=350
XWD =020,-=220
XWD =040,-=090
XWD =050, =040
XWD =030, =170
XWD =030, =300
LETTR4: XWD =000,-=350
XWD =080,-=220
XWD =170,-=090
XWD =210, =040
XWD =140, =170
XWD =070, =300
LETTR5: XWD =000,-=350
XWD =160,-=220
XWD =300,-=090
XWD =360, =040
XWD =250, =170
XWD =110, =300
WORDS: ;SETS OF TRIPLETS FOR THE VARIOUS ALPHANUMERICS.
WORD0: SIXBIT /ZERO /
SIXBIT / ZERO /
SIXBIT / ZERO/
WORD1: SIXBIT / ONE /
SIXBIT / RED /
SIXBIT / ROSE/
WORD2: SIXBIT / TWO /
SIXBIT / ICE /
SIXBIT /CREAMS/
WORD3: SIXBIT /THREE /
SIXBIT / BLIND/
SIXBIT / MICE/
WORD4: SIXBIT /FOUR /
SIXBIT /FLYING/
SIXBIT / FISH/
WORD5: SIXBIT / FIVE /
SIXBIT / FAT /
SIXBIT / FROGS/
WORD6: SIXBIT / SIX /
SIXBIT / BIG /
SIXBIT / BOYS /
WORD7: SIXBIT /SEVEN /
SIXBIT / TALL /
SIXBIT / TREES/
WORD8: SIXBIT /EIGHT /
SIXBIT /LITTLE/
SIXBIT / BIRDS/
WORD9: SIXBIT / NINE /
SIXBIT / APPLE/
SIXBIT / PIES /
BLOCK 25 ;21 WORDS WHICH WILL NEVER BE LOOKED AT
WORDA: SIXBIT / AN /
SIXBIT / ANGRY/
SIXBIT / ANT /
WORDB: SIXBIT / BIG /
SIXBIT /BUTTER/
SIXBIT / FLY /
WORDC: SIXBIT /CAN /
SIXBIT / YOU /
SIXBIT / COME /
WORDD: SIXBIT / DOGS /
SIXBIT / LIKE /
SIXBIT / BONES/
WORDE: SIXBIT / I /
SIXBIT / EAT /
SIXBIT / EGGS /
WORDF: SIXBIT / FAT /
SIXBIT / FRIED/
SIXBIT / FISH /
WORDG: SIXBIT /CHEW /
SIXBIT / GOOEY/
SIXBIT / GUM /
WORDH: SIXBIT /HELP /
SIXBIT / HELP /
SIXBIT / HELP/
WORDI: SIXBIT / I /
SIXBIT / LIKE /
SIXBIT / YOU /
WORDJ: SIXBIT / JOEY /
SIXBIT / JUMPS/
SIXBIT / UP /
WORDK: SIXBIT / KICK /
SIXBIT / THE /
SIXBIT / CAN /
WORDL: SIXBIT / LISA /
SIXBIT /LAUGHS/
SIXBIT / A LOT/
WORDM: SIXBIT / MARY /
SIXBIT / MOO /
SIXBIT / COW /
WORDN: SIXBIT / NO /
SIXBIT / YES /
SIXBIT / NO /
WORDO: SIXBIT /OH /
SIXBIT / OH /
SIXBIT / OH/
WORDP: SIXBIT /PEEL /
SIXBIT / AN /
SIXBIT / APPLE/
WORDQ: SIXBIT / QUICK/
SIXBIT /QUICK /
SIXBIT / QUACK/
WORDR: SIXBIT /RICE /
SIXBIT / IS /
SIXBIT / NICE/
SIXBIT /SING /
SIXBIT / A /
SIXBIT / SONG/
WORDT: SIXBIT /TOUCH /
SIXBIT / YOUR /
SIXBIT / TOES/
WORDU: SIXBIT /UP /
SIXBIT / AND /
SIXBIT / DOWN /
WORDV: SIXBIT /VERY /
SIXBIT / VERY /
SIXBIT / GOOD/
WORDW: SIXBIT /WASH /
SIXBIT / THE /
SIXBIT / WALL/
WORDX: SIXBIT / X X X/
SIXBIT / MEANS/
SIXBIT /KISSES/
WORDY: SIXBIT /YOUR /
SIXBIT /YELLOW/
SIXBIT / SHIRT/
WORDZ: SIXBIT /ZEE /
SIXBIT / FOR /
SIXBIT / ZEBRA/
SOUNDS: ;LIST OF SOUNDS CORRESPONDING ONE TO ONE TO WORDS.
SND0: SIXBIT /N017/
SIXBIT /N027/
SIXBIT /N037/
SND1: SIXBIT /N117/
SIXBIT /N127/
SIXBIT /N137/
SND2: SIXBIT /N217/
SIXBIT /N227/
SIXBIT /N237/
SND3: SIXBIT /N317/
SIXBIT /N327/
SIXBIT /N337/
SND4: SIXBIT /N417/
SIXBIT /N427/
SIXBIT /N437/
SND5: SIXBIT /N517/
SIXBIT /N527/
SIXBIT /N537/
SND6: SIXBIT /N617/
SIXBIT /N627/
SIXBIT /N637/
SND7: SIXBIT /N717/
SIXBIT /N727/
SIXBIT /N737/
SND8: SIXBIT /N817/
SIXBIT /N827/
SIXBIT /N837/
SND9: SIXBIT /N917/
SIXBIT /N927/
SIXBIT /N937/
BLOCK 25 ;THIS 21 WORDS IS NEVER LOOKED AT
SNDA: SIXBIT /A17/
SIXBIT /A27/
SIXBIT /A37/
SNDB: SIXBIT /B17/
SIXBIT /B27/
SIXBIT /B37/
SNDC: SIXBIT /C17/
SIXBIT /C27/
SIXBIT /C37/
SNDD: SIXBIT /D17/
SIXBIT /D27/
SIXBIT /D37/
SNDE: SIXBIT /E17/
SIXBIT /E27/
SIXBIT /E37/
SNDF: SIXBIT /F17/
SIXBIT /F27/
SIXBIT /F37/
SNDG: SIXBIT /G17/
SIXBIT /G27/
SIXBIT /G37/
SNDH: SIXBIT /H17/
SIXBIT /H27/
SIXBIT /H37/
SNDI: SIXBIT /I17/
SIXBIT /I27/
SIXBIT /I37/
SNDJ: SIXBIT /J17/
SIXBIT /J27/
SIXBIT /J37/
SNDK: SIXBIT /K17/
SIXBIT /K27/
SIXBIT /K37/
SNDL: SIXBIT /L17/
SIXBIT /L27/
SIXBIT /L37/
SNDM: SIXBIT /M17/
SIXBIT /M27/
SIXBIT /M37/
SNDN: SIXBIT /N17/
SIXBIT /N27/
SIXBIT /N37/
SNDO: SIXBIT /O17/
SIXBIT /O27/
SIXBIT /O37/
SNDP: SIXBIT /P17/
SIXBIT /P27/
SIXBIT /P37/
SNDQ: SIXBIT /Q17/
SIXBIT /Q27/
SIXBIT /Q37/
SNDR: SIXBIT /R17/
SIXBIT /R27/
SIXBIT /R37/
SNDS: SIXBIT /S17/
SIXBIT /S27/
SIXBIT /S37/
SNDT: SIXBIT /T17/
SIXBIT /T27/
SIXBIT /T37/
SNDU: SIXBIT /U17/
SIXBIT /U27/
SIXBIT /U37/
SNDV: SIXBIT /V17/
SIXBIT /V27/
SIXBIT /V37/
SNDW: SIXBIT /W17/
SIXBIT /W27/
SIXBIT /W37/
SNDX: SIXBIT /X17/
SIXBIT /X27/
SIXBIT /X37/
SNDY: SIXBIT /Y17/
SIXBIT /Y27/
SIXBIT /Y37/
SNDZ: SIXBIT /Z17/
SIXBIT /Z27/
SIXBIT /Z37/
THISWD: 0 ;WORD
THISND: 0 ;SOUND
THISLP: 0 ;LETTER POSITION
THISCH: 0 ;CHARACTER
THISTP: 0 ;TULIP POINT
TEMP: 0
END